from sqlalchemy import create_engine, Column, Integer, String, Date
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import datetime

from init.mysql import engine

# 创建数据库连接
Base = declarative_base()


# 定义Holidays实体类
class Holidays(Base):
    __tablename__ = 'holidays'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    date = Column(Date)
    type = Column(String(50))


# 创建表结构
Base.metadata.create_all(engine)

# 创建Session对象
Session = sessionmaker(bind=engine)
session = Session()

year = 2024
# 获取2024年所有日期
start_date = datetime.date(year, 1, 1)
end_date = datetime.date(year, 12, 31)
delta = datetime.timedelta(days=1)

"""
1.元旦：1月1日放假，如遇周末则与周末连休。
2.春节：根据农历日期确定，一般放假7至8天，且会进行调休以形成连续假期。
3.清明节：公历4月4日或5日左右，放假3天，通常会进行调休以便与周末连休。
4.劳动节：5月1日，一般放假5天，也可能会根据具体情况安排调休。
5.端午节：农历五月初五，放假1天，如遇周末则与周末连休。
6.中秋节：农历八月十五，放假1天，若遇周末可能会调休形成3天连假。
7.国庆节：10月1日开始，连续放假7天，如遇周末也会进行相应的调休安排。
"""


class Festivals:
    def __init__(self, name, date_, type_):
        self.name = name
        self.date = date_
        self.type = type_


festivals = []
festivals.insert(Festivals(name='元旦', date_="{0}-{1}".format(year, '01-01'), type_='1'))
festivals.insert(Festivals(name='春节', date_="{0}-{1}".format(year, '02-10'), type_='2'))
festivals.insert(Festivals(name='春节', date_="{0}-{1}".format(year, '02-11'), type_='2'))
festivals.insert(Festivals(name='春节', date_="{0}-{1}".format(year, '02-12'), type_='2'))
festivals.insert(Festivals(name='春节', date_="{0}-{1}".format(year, '02-13'), type_='2'))
festivals.insert(Festivals(name='春节', date_="{0}-{1}".format(year, '02-14'), type_='2'))
festivals.insert(Festivals(name='春节', date_="{0}-{1}".format(year, '02-15'), type_='2'))
festivals.insert(Festivals(name='春节', date_="{0}-{1}".format(year, '02-16'), type_='2'))
festivals.insert(Festivals(name='春节', date_="{0}-{1}".format(year, '02-17'), type_='2'))

while start_date <= end_date:
    # 插入数据到表中
    holiday = Holidays(name='', date=start_date, type='')
    session.add(holiday)
    start_date += delta

# 提交事务并关闭Session
session.commit()
session.close()
